﻿using Common.Contract.Customer.Request;
using Common.Contract.Customer.Request.CustomerManager;
using Common.Contract.Customer.Request.PortfolioManagement;
using Common.Contract.Customer.Request.ReduceFee;
using Common.Contract.Customer.Response;
using Common.Contract.Customer.Response.CustomerManager;
using Common.Contract.Customer.Response.PortfolioManagement;
using Common.Contract.Customer.Response.ReduceFee;
using System.ServiceModel;

namespace Common.Contract.Customer
{
    [ServiceContract]
    public interface ICustomer
    {
        #region Alert customer
        [OperationContract]
        RetrieveCustomerCelebrationResponse RetrieveCustomerCelebration(RetrieveCustomerCelebrationRequest request);
        [OperationContract]
        RetrieveCustomerRepresentativeCelebrationResponse RetrieveCustomerRepresentativeCelebration(RetrieveCustomerRepresentativeCelebrationRequest request);
        [OperationContract]
        RetrieveCustomerBadBankResponse RetrieveCustomerBadBank(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertBadbankResponse RetrieveCustomerAlertBadBank(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveTblAlertDepositMatdtResponse RetrieveTblAlertDepositMatdt(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertLcResponse RetrieveCustomerAlertLc(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertOverdueResponse RetrieveCustomerAlertOverdue(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertGeneralResponse RetrieveCustomerAlertGeneral(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertCardOverdueResponse RetrieveCustomerAlertCardOverdue(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertBLResponse RetrieveCustomerAlertBL(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertLimitResponse RetrieveCustomerAlertLimit(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertInactiveResponse RetrieveCustomerAlertInactive(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerLoanMatdtResponse RetrieveCustomerLoanMatdt(RetrieveCustomerAlertRequest request);
        [OperationContract]
        RetrieveCustomerAlertCasaResponse RetrieveCustomerAlertCasa(RetrieveCustomerAlertRequest request);
        #endregion
        #region Customer manager
        [OperationContract]
        RetrieveCustomerResponse RetrieveCustomer(RetrieveCustomerRequest request);
        [OperationContract]
        RetrieveCustomerResponse RetrieveTotalCustomer(RetrieveCustomerRequest request);
        [OperationContract]
        RetrieveCustomerSubSegmentResponse RetrieveCustomerSubSegment(RetrieveCustomerSubSegmentRequest request);
        [OperationContract]
        CountCustSegmentResponse CountCustSegment(RetrieveCustomerSubSegmentRequest request);
        [OperationContract]
        RetrieveCustomerFreedomResponse RetrieveCustomerFreedom(RetrieveCustomerFreedomRequest request);
        [OperationContract]
        RetrieveCustomerPriorityResponse RetrieveCustomerPriority(RetrieveCustomerPriorityRequest request);
        [OperationContract]
        RetrieveCustomerCardDetailByCifResponse RetrieveCustomerCardDetailByCif(RetrieveCustomerCardDetailByCifRequest request);
        [OperationContract]
        RetrieveCustomerI2bDetailByCifResponse RetrieveCustomerI2bDetailByCif(RetrieveCustomerI2bDetailByCifRequest request);
        [OperationContract]
        RetrieveCustomerTop10Response RetrieveCustomerTop10(RetrieveCustomerTop10Request request);
        [OperationContract]
        RetrieveCustomerFeedbackResponse RetrieveCustomerFeedbackByDao(RetrieveCustomerFeedbackRequest request);
        [OperationContract]
        RetrieveCustomerNeedToUpdateResponse RetrieveCustomerNeedToUpdate(RetrieveCustomerNeedToUpdateRequest request);
        [OperationContract]
        RetrieveCustomerNeedUpdateInfoRawResponse RetrieveCustomerNeedUpdateInfoRawByCif(RetrieveCustomerNeedUpdateInfoRawRequest request);
        [OperationContract]
        RetrieveCustomerNeedUpdateInfoRawResponse RetrieveCustomerNeedUpdateInfoRaw(RetrieveCustomerNeedUpdateInfoRawRequest request);
        [OperationContract]
        RetrieveCustomerLimitInfoByCifResponse RetrieveCustomerLimitInfoByCif(RetrieveCustomerLimitInfoByCifRequest request);
        [OperationContract]
        RetrieveCustomerLowValueResponse RetrieveCustomerLowValue(RetrieveCustomerLowValueRequest request);
        [OperationContract]
        RetrieveCustomerFeedbackDetailByCifResponse RetrieveCustomerFeedbackDetailByCif(RetrieveCustomerFeedbackDetailByCifRequest request);
        [OperationContract]
        RetrieveCustomerFinanceInfoByCifResponse RetrieveCustomerFinanceInfoByCif(RetrieveCustomerFinanceInfoByCifRequest request);
        [OperationContract]
        RetrieveCustomerReduceInfoResponse RetrieveCustomerReduceInfoByCif(RetrieveCustomerReduceInfoRequest request);
        [OperationContract]
        RetrieveNewLendingInfoResponse RetrieveNewLendingInfoByCif(RetrieveNewLendingInfoRequest request);
        #endregion
        #region Account Planning
        [OperationContract]
        RetrieveAccountPlanningResponse RetrieveAccountPlanning(RetrieveAccountPlanningRequest request);
        [OperationContract]
        RetrieveAccountPlanningByCifResponse RetrieveAccountPlanningByCif(RetrieveAccountPlanningByCifRequest request);
        [OperationContract]
        RetrieveAccountPlanningDataViewResponse RetrieveAccountPlanningFinanceDataViewByTime(RetrieveAccountPlanningDataViewRequest request);
        [OperationContract]
        RetrieveAccountPlanningDataViewResponse RetrieveAccountPlanningProductHoldingDataViewByTime(RetrieveAccountPlanningDataViewRequest request);
        [OperationContract]
        RetrieveDataAccountPlanningByCifResponse RetrieveAccountPlanningFinanceByCif(RetrieveDataAccountPlanningByCifRequest request);
        [OperationContract]
        RetrieveDataAccountPlanningByCifResponse RetrieveAccountPlanningProductHoldingByCif(RetrieveDataAccountPlanningByCifRequest request);
        [OperationContract]
        ResponseRecord UpdateAccountPlanning(UpdateAccountPlanningRequest request);
        [OperationContract]
        ResponseRecord UpdateAccountPlanningFinance(UpdateDataAccountPlanningRequest request);
        [OperationContract]
        ResponseRecord UpdateAccountPlanningProductHolding(UpdateDataAccountPlanningRequest request);
        [OperationContract]
        RetrieveAccountPlanningHistoryResponse RetrieveAccountPlanningHistoryByCif(RetrieveAccountPlanningHistoryRequest request);
        [OperationContract]
        RetrieveAccountPlanningHistoryResponse RetrieveAccountPlanningHistoryByCifType(RetrieveAccountPlanningHistoryRequest request);
        #endregion
        #region helper service
        [OperationContract]
        RetrieveListBranchResponse RetrieveListBranch(RetrieveListBranchRequest request);
        [OperationContract]
        RetrieveListProductResponse RetrieveListProduct(RetrieveListProductRequest request);
        [OperationContract]
        RetrieveCustomerInfoResponse RetrieveCustomerInfoByCif(RetrieveCustomerInfoRequest request);
        [OperationContract]
        RetrieveRelCusInfoResponse RetrieveRelCusInfoByCif(RetrieveRelCusInfoRequest request);
        [OperationContract]
        RetrieveListCustomerResponse RetrieveListCustomer(RetrieveListCustomerRequest request);
        [OperationContract]
        RetrieveCountCustomerAlertResponse RetriveCountCustomerAlert(RetriveCountCustomerAlertRequest request);
        #endregion
        #region Export excel
        [OperationContract]
        RetrieveCustomerLoanMatdtForExportResponse RetrieveCustomerLoanMatdtForExport(RetrieveCustomerAlertRequest request);
        #endregion
    }
}
